home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
games
/
hitton
/
htn_src.lzh
/
HTN_SRC
/
HTN_INIT.C
< prev
next >
Wrap
Text File
|
2000-07-03
|
9KB
|
369 lines
/* 『ひっとん』 ver.1.00 初期設定 (HTN_INIT.C) 2000 TAU Software */
# include "HTN_DEF.H"
/*** グラフィックデータ格納領域のポインタ処理 ***/
/* [返り値] 格納領域の先頭アドレス */
unsigned char *GRAP(gp0)
unsigned char *gp0; /* 先頭アドレスの指定 ( NULLの場合は、読取り ) */
{
static unsigned char *gp; /* 先頭アドレス記憶用 */
if(gp0 != NULL) gp=gp0;
return gp;
}
/*** ファイル名の処理 ***/
/* [返り値] ファイル名 */
char *FILES_NAME(no,fn)
int no; /* ファイル番号
0: テキストデーター 1: PCGデーター
2: スプライトパレットデーター 3: グラフィックデーター
4: 音楽データー 5: 音楽データ
6: 記録データー */
char *fn; /* ファイル名の指定 ( NULLの場合は、読取り ) */
{
static char fns0[7][256]={ "HTN_TXDT.DAT", "HTN_SPDT.SP", "HTN_SPDT.PAL",
"HTN_GRDT.PIC", "HTN_MSDT.ZPD","HTN_MSDT.ZMD", "HTN_RCDT.DAT" };
/* ファイル名(初期) */
char *fns[]={*fns0,*(fns0+1),*(fns0+2),*(fns0+3),*(fns0+4),*(fns0+5),*(fns0+6),*(fns0+7)};
if(fn != NULL) strcpy(*(fns+no),fn);
return *(fns+no);
}
/*** レコードの処理 ***/
/* [返り値] ファイル名 */
RECS *RECS_DATA(no,rec)
int no; /* 順位 */
RECS *rec; /* レコードの指定 ( NULLの場合は、読取り ) */
{
static RECS recs_memo[5]={{ "コウジ", 19072, 369, 14 },
{ "アオイ ", 17368, 324, 12 },
{ "ユウキ ", 14191, 230, 9 },
{ "イクミ ", 11537, 259, 10 },
{ "コズエ", 9126, 223, 8 } };
if(rec != NULL) *(recs_memo+no)=*rec;
return (recs_memo+no);
}
/*** 環境の処理 ***/
/* [返り値] 環境状態 */
int CNF_STAT(no,cnf)
int no; /* 環境番号 */
int cnf; /* 環境内容の指定 ( -1の場合は、読取り ) */
{
static char cnfs[2]={ 1,1 };
/* ディスク書込(1:ON/0:OFF/2:Fileナシ)、演奏(1:ON/0:OFF) */
if(cnf != -1) *(cnfs+no)=cnf;
return *(cnfs+no);
}
/*** ディスク書き込み ***/
/* [返り値] 0:正常 / -1:エラー */
int WRITE_REC()
{
FILE *fp;
int err=-1;
if(CNF_STAT(0,-1) != 0){
if((fp=fopen(FILES_NAME(6,NULL),"wb")) != NULL){
if(fputs(RECS_HEAD,fp) == 0){
if(fwrite(RECS_DATA(0,NULL),sizeof(RECS),5,fp) == 5) err=0;
}
}
fclose(fp);
if(err) unlink(FILES_NAME(6,NULL)); else CNF_STAT(0,1);
} else err=0;
return err;
}
int main(argc,argv)
int argc;
char *argv[];
{
int i,j,k;
int ck,ln;
int err=0;
short int tx_pal0[16];
short int tx_pal[16]={ 0,19026,34814, 2046,65504,65472,64544,63488,
49120,32704,48190,30782,34786, 1984,33854,30782 };
char header[17];
unsigned char *gp0,*gp;
FILE *fp;
printf("
『ひっとん』<Ver.1.00> 2000 TAU Software\n");
for(i=1;i<argc;i++){
strupr(*(argv+i));
ln=strlen(*(argv+i));
if(**(argv+i)=='/' || **(argv+i)=='-'){
ck=0;
if(ln < 2) continue;
switch(*(*(argv+i)+1)){
case '?':
case 'H': err=2; break;
case 'S': CNF_STAT(0,0); break;
case 'Z': CNF_STAT(1,0); break;
case 'F': if(ln >= 3){FILES_NAME(6,*(argv+i)+2); ck=0;} else ck=1;
}
} else if(ck){ FILES_NAME(6,*(argv+i)); ck=0; }
if(err) break;
}
if(err == 2){
printf("起動法 : HTN_MAIN.X [<スイッチ(/ or -)> ...]\n");
printf("スイッチ:(大・小文字の区別はありません)\n");
printf("\t /F <ファイル> 記録ファイルの指定 (default:HTN_RCDT.DAT)\n");
printf("\t /S\t\t ディスクへの書込禁止(記録データ)\n");
printf("\t /Z\t\t 音楽・効果音の演奏をしない\n");
printf("\t /H or /?\t ヘルプメッセージの表示\n\n");
while(KFLUSHIO(0xFF));
exit(1);
}
err=0;
if(!bldmem(34)){
if((gp0=malloc(35396)) != NULL){
GRAP(gp0);
for(i=0;i<7;i++){
if((fp=fopen(FILES_NAME(i,NULL),"r")) == NULL){
if((i==4 || i==5) && CNF_STAT(1,-1)==0) continue;
if(i==6 && CNF_STAT(0,-1)==0) continue;
printf("「%s」がないっ!\n",FILES_NAME(i,NULL));
if(i<4) err=2; else{
if(err == 0){
if(i==4 || i==5) CNF_STAT(1,0);
if(i == 6) CNF_STAT(0,2);
}
}
}
} /* ファイル存在チェック */
fcloseall();
if(!err){
/* Z-MUSIC Check */
if(CNF_STAT(1,-1) == 1){
if(zm_ver()&0xFFFF){
m_init();
m_adpcm_block(FILES_NAME(4,NULL));
zmd_play(FILES_NAME(5,NULL));
m_stop(0,0,0,0,0,0,0,0,0,0);
} else CNF_STAT(1,0);
}
if(CNF_STAT(0,-1) != 2){
if((fp=fopen(FILES_NAME(6,NULL),"rb")) != NULL){/* 記録データ読み込み */
err=2;
if(fgets(header,9,fp) != NULL){
if(strcmp(header,RECS_HEAD) == 0){
if(fread(RECS_DATA(0,NULL),sizeof(RECS),5,fp) == 5) err=0;
}
}
fclose(fp);
if(err) printf("記録ファイル「%s」のフォーマットが、違うよ!\n",FILES_NAME(6,NULL));
}
}
if(CNF_STAT(0,-1) == 2){
if(WRITE_REC()){ printf("記録ファイル「%s」の作成に失敗しちゃった!\n",FILES_NAME(6,NULL)); err=2; }
}
}
if(!err){
if((fp=fopen(FILES_NAME(0,NULL),"rb")) != NULL){ /* テキストデータ読み込み */
if(fread(gp0,sizeof(char),14406,fp) < 14406) err=8;
fclose(fp);
} else err=8;
}
if(!err){
srand(time(NULL));
TGUSEMD(1,2);
OS_CUROF();
CRTMOD(8);
printf("\x1B[>1h");
G_CLR_ON();
TXFILL0(0,0,1024,1024,15,0);
VPAGE2(0);
if(JOY0(2) & 0x40) VPAGE2(0x2F);
for(i=0;i<16;i++) *(tx_pal0+i)=TPALET2(i,-1);
/* ちょっとまっててね */
PLAY_MUS(4);
VDISP0();
TXFILL0(0,0,512,512,8,0xFFFF);
B_WPOKE((unsigned short *)0xE80014,0);
B_WPOKE((unsigned short *)0xE80016,0); /* テキストスクロール */
TPALET2( 8, 1);
TPALET2( 9,65534);
TPALET2(10, 2108);
TCOLOR(1);
TEXTPUT(32,176,(struct FNTBUF *)(WAIT(0)));
TCOLOR(2);
TEXTPUT(32,176,(struct FNTBUF *)(WAIT(1)));
VDISP0()
VPAGE2(0x2F);
SP_INIT();
BGCTRLST(0,0,0);
BGCTRLST(1,1,0);
gp=(unsigned char *)HTN_LOG0;
if((fp=fopen(FILES_NAME(1,NULL),"rb")) != NULL){
if(fread(gp,sizeof(unsigned char),8448,fp) < 8448) err|=9;
fclose(fp);
if (!err) for(i=0;i<66;i++) SP_DEFCG(i,1,gp+i*128);
} else err|=9; /* スプライトデータ定義 */
if((fopen(FILES_NAME(2,NULL),"rb")) != NULL){
if(fread(gp,sizeof(unsigned char),480,fp) < 480) err|=10;
fclose(fp);
if (!err){
for(j=0;j<15;j++) for(i=0;i<16;i++)
SPALET0(i,j+1,*((unsigned short *)(gp+j*0x20+i*2)));
}
} else err|=10; /* スプライトパレット定義 */
BGTEXTCL(0,256); BGTEXTCL(1,256);
APAGE(1);
if(apic_load(FILES_NAME(3,NULL),0,0)) err|=4;
if(!err){
APAGE(1);
GRM_GP(256,256, 64, 48,LVL_PNL(0),1); /* 「レベル」 */
APAGE(0);
GRM_GP( 12, 15, 64, 24,LVL_PNL(0),0);
GRM_GP( 12,137, 64, 24,LVL_PNL(1),0);
GRM_GP(432, 48, 64, 24,LVL_PNL(0),0);
APAGE(1);
GRM_GP(320,256, 82, 48,NXT_PNL(0),1); /* 「ネクスト」 */
APAGE(0);
GRM_GP(120, 63, 82, 24,NXT_PNL(0),0);
GRM_GP(120,185, 82, 24,NXT_PNL(1),0);
APAGE(1);
GRM_GP(402,256, 64, 48,SCR_PNL(0),1); /* 「スコア」 */
APAGE(0);
GRM_GP(120, 15, 64, 24,SCR_PNL(0),0);
GRM_GP(120,137, 64, 24,SCR_PNL(1),0);
GRM_GP(348, 72, 64, 24,SCR_PNL(0),0);
APAGE(1);
GRM_GP(256,304, 82, 24,BLK_PNL(0),1); /* 「ブロック」(1P) */
GRM_GP(338,304, 82, 24,BLK_PNL(1),1); /* 「ブロック」(2P) */
APAGE(0);
GRM_GP(102, 39, 82, 24,BLK_PNL(0),0);
GRM_GP(102,161, 82, 24,BLK_PNL(1),0);
GRM_GP(412, 72, 82, 24,BLK_PNL(1),0);
APAGE(1);
GRM_GP(256,384,132, 28,RANK_LOG,1); /* 「ランキング」(ランキング画面)*/
APAGE(0);
GRM_GP(288, 24,132, 28,RANK_LOG,0);
APAGE(1);
GRM_GP(420,304, 64, 24,NAME_PNL,1); /* 「なまえ」(ランキング画面) */
APAGE(0);
GRM_GP(284, 72, 64, 24,NAME_PNL,0);
APAGE(1);
GRM_GP(256,412, 54, 65,HTN_LOG0 ,1); /* 「ひ」 */
GRM_GP(310,412, 48, 65,HTN_LOG1 ,1); /* 「っ」 */
GRM_GP(358,412, 44, 65,HTN_LOG2 ,1); /* 「と」 */
GRM_GP(402,412, 51, 65,HTN_LOG3 ,1); /* 「ん」 */
GRM_GP(256,477,203, 19,TAU_LOG ,1); /* 「2000 TAU Software」 */
GRM_GP(256,328,128, 28,SEL_PNL(0),1); /* 選択肢「スタート」 */
GRM_GP(256,356,128, 28,SEL_PNL(1),1); /* 選択肢「ランキング」*/
GRM_GP(384,356,128, 28,SEL_PNL(2),1); /* 選択肢「おしまい」 */
APAGE(0);
GRM_GP(44,484,203,19,TAU_LOG,0);
CRTMOD(266);
WINDOW(0,0,511,511);
VPAGE2(0);
TXFILL0(0,0,512,512,15,0); /* テキスト画面クリア */
for(i=0;i<16;i++) TPALET2(i,*(tx_pal+i));
TITLE0(); /* タイトル部へ */
}
PLAY_MUS(0);
VPAGE2(0);
for(i=0;i<16;i++) TPALET2(i,*(tx_pal0+i));
B_WPOKE((unsigned short *)0xE80014,0);
B_WPOKE((unsigned short *)0xE80016,0); /* テキストスクロール */
TXFILL0(0,0,1024,1024,15,0);
CRTMOD(16);
TGUSEMD(1,1);
printf("\x1B[>1l");
OS_CURON();
while(KFLUSHIO(0xFE));
}
free(gp0);
} else err=1;
rstmem();
} else err=1;
if(err == 1) printf("メモリが、足りないよ!\n");
if(err & 4) printf("グラフィック「%s」のフォーマットが、違うよ!\n",FILES_NAME(3,NULL));
if(err & 8) printf("「%s」の読込み、失敗したみたい!\n",FILES_NAME(err&3,NULL));
if(!err){
printf("
『ひっとん』<Ver.1.00> 2000 TAU Software\n");
printf("楽しんでいただけました?\n");
}
exit(err);
}